উদাহরণ সহ Multiple DataSource ব্যবস্থাপনা

Java Technologies - স্প্রিং বুট জেপিএ (Spring Boot JPA) - Multiple DataSource Configuration
258

Spring Boot JPA ব্যবহারের মাধ্যমে সাধারণত একটি ডেটাবেসের সাথে কাজ করা হয়, তবে কিছু অ্যাপ্লিকেশনে একাধিক ডেটাবেস ব্যবহার করার প্রয়োজন হতে পারে। এই পরিস্থিতিতে Multiple DataSource Configuration ব্যবহার করা হয়।

Spring Boot এ Multiple DataSource কনফিগারেশনের মাধ্যমে আপনি একাধিক ডেটাবেসের সাথে সংযোগ স্থাপন এবং পরিচালনা করতে পারেন। স্প্রিং বুটের এই বৈশিষ্ট্যটি একটি অ্যাপ্লিকেশনকে একাধিক ডেটাবেসে ডেটা অ্যাক্সেস করতে সক্ষম করে।

এই টিউটোরিয়ালে আমরা শিখব কীভাবে Multiple DataSource কনফিগার করা যায় এবং Spring Data JPA ব্যবহারের মাধ্যমে একাধিক ডেটাবেসের সাথে ইন্টারঅ্যাক্ট করা যায়।


Multiple DataSource কনফিগারেশন এর ধারণা

স্প্রিং বুটে একাধিক ডেটাবেস কনফিগার করার জন্য আপনাকে আলাদা DataSource কনফিগারেশন তৈরি করতে হবে, এবং প্রতিটি ডেটাবেসের জন্য EntityManagerFactory, TransactionManager এবং Repository কনফিগার করতে হবে।

1. First DataSource Configuration

প্রথম ডেটাবেসের জন্য ডেটাসোর্স কনফিগারেশন।

2. Second DataSource Configuration

দ্বিতীয় ডেটাবেসের জন্য আলাদা কনফিগারেশন।

3. @Primary@Qualifier ব্যবহার করা

ডিফল্ট DataSource নির্বাচন করার জন্য @Primary এবং বিশেষ DataSource নির্বাচন করতে @Qualifier ব্যবহার করা হয়।


উদাহরণ: Multiple DataSource কনফিগারেশন

এই উদাহরণে, আমরা দুইটি ডেটাবেস কনফিগার করব: একটি MySQL ডেটাবেস এবং একটি PostgreSQL ডেটাবেস।


1. application.properties কনফিগারেশন

প্রথমে, application.properties ফাইলে ডেটাবেস কনফিগারেশন যুক্ত করতে হবে।

application.properties

# Primary DataSource - MySQL configuration
spring.datasource.primary.url=jdbc:mysql://localhost:3306/primary_db
spring.datasource.primary.username=root
spring.datasource.primary.password=password
spring.datasource.primary.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.primary.jpa.hibernate.ddl-auto=update
spring.datasource.primary.jpa.database-platform=org.hibernate.dialect.MySQL5Dialect

# Secondary DataSource - PostgreSQL configuration
spring.datasource.secondary.url=jdbc:postgresql://localhost:5432/secondary_db
spring.datasource.secondary.username=postgres
spring.datasource.secondary.password=password
spring.datasource.secondary.driver-class-name=org.postgresql.Driver
spring.datasource.secondary.jpa.hibernate.ddl-auto=update
spring.datasource.secondary.jpa.database-platform=org.hibernate.dialect.PostgreSQL95Dialect

এখানে, দুটি ডেটাবেসের জন্য আলাদা কনফিগারেশন দেয়া হয়েছে: প্রথমটি MySQL এবং দ্বিতীয়টি PostgreSQL


2. First DataSource Configuration

প্রথম ডেটাবেস কনফিগারেশনের জন্য @Configuration ক্লাস তৈরি করতে হবে। এখানে MySQL ডেটাবেসের জন্য কনফিগারেশন দেয়া হবে।

PrimaryDataSourceConfig.java

package com.example.springbootjpamultiple.datasource;

import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;
import org.springframework.jdbc.datasource.DriverManagerDataSource;
import org.springframework.orm.jpa.JpaTransactionManager;
import org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean;
import org.springframework.transaction.PlatformTransactionManager;
import org.springframework.transaction.annotation.EnableTransactionManagement;

import javax.persistence.EntityManagerFactory;
import javax.sql.DataSource;

@Configuration
@EnableTransactionManagement
public class PrimaryDataSourceConfig {

    @Primary
    @Bean(name = "primaryDataSource")
    @ConfigurationProperties(prefix = "spring.datasource.primary")
    public DataSource dataSource() {
        return new DriverManagerDataSource();
    }

    @Primary
    @Bean(name = "entityManagerFactory")
    public LocalContainerEntityManagerFactoryBean entityManagerFactory(
            @Qualifier("primaryDataSource") DataSource dataSource) {
        LocalContainerEntityManagerFactoryBean factoryBean = new LocalContainerEntityManagerFactoryBean();
        factoryBean.setDataSource(dataSource);
        factoryBean.setPackagesToScan("com.example.springbootjpamultiple.model");
        return factoryBean;
    }

    @Primary
    @Bean(name = "transactionManager")
    public PlatformTransactionManager transactionManager(
            @Qualifier("entityManagerFactory") EntityManagerFactory entityManagerFactory) {
        return new JpaTransactionManager(entityManagerFactory);
    }
}

এখানে, PrimaryDataSourceConfig ক্লাসে প্রথম ডেটাবেসের জন্য DataSource, EntityManagerFactory এবং TransactionManager কনফিগার করা হয়েছে।


3. Second DataSource Configuration

এখন, দ্বিতীয় ডেটাবেসের জন্য কনফিগারেশন তৈরি করতে হবে। এখানে PostgreSQL ডেটাবেসের জন্য কনফিগারেশন দেয়া হবে।

SecondaryDataSourceConfig.java

package com.example.springbootjpamultiple.datasource;

import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.jdbc.datasource.DriverManagerDataSource;
import org.springframework.orm.jpa.JpaTransactionManager;
import org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean;
import org.springframework.transaction.PlatformTransactionManager;

import javax.persistence.EntityManagerFactory;
import javax.sql.DataSource;

@Configuration
public class SecondaryDataSourceConfig {

    @Bean(name = "secondaryDataSource")
    @ConfigurationProperties(prefix = "spring.datasource.secondary")
    public DataSource dataSource() {
        return new DriverManagerDataSource();
    }

    @Bean(name = "secondaryEntityManagerFactory")
    public LocalContainerEntityManagerFactoryBean entityManagerFactory(
            @Qualifier("secondaryDataSource") DataSource dataSource) {
        LocalContainerEntityManagerFactoryBean factoryBean = new LocalContainerEntityManagerFactoryBean();
        factoryBean.setDataSource(dataSource);
        factoryBean.setPackagesToScan("com.example.springbootjpamultiple.model");
        return factoryBean;
    }

    @Bean(name = "secondaryTransactionManager")
    public PlatformTransactionManager transactionManager(
            @Qualifier("secondaryEntityManagerFactory") EntityManagerFactory entityManagerFactory) {
        return new JpaTransactionManager(entityManagerFactory);
    }
}

এখানে, SecondaryDataSourceConfig ক্লাসে দ্বিতীয় ডেটাবেসের জন্য DataSource, EntityManagerFactory এবং TransactionManager কনফিগার করা হয়েছে।


4. Entity Class

ডেটাবেসে সংরক্ষিত ডেটার জন্য একটি Entity ক্লাস তৈরি করতে হবে। এই Entity কেবল একটি ডেটাবেসের জন্য নয়, বরং আমাদের প্রোজেক্টে একাধিক ডেটাবেসের জন্য ব্যবহৃত হবে।

Employee.java

package com.example.springbootjpamultiple.model;

import javax.persistence.Entity;
import javax.persistence.Id;

@Entity
public class Employee {

    @Id
    private Long id;
    private String name;
    private String department;

    // Getters and Setters
}

এখানে, Employee ক্লাস একটি সাধারণ Entity ক্লাস, যা id, name, এবং department ফিল্ড ধারণ করছে।


5. Repository Interface

EmployeeRepository তৈরি করতে হবে, যা Spring Data JPA ব্যবহার করে ডেটাবেসের সাথে CRUD অপারেশন করবে।

EmployeeRepository.java

package com.example.springbootjpamultiple.repository;

import com.example.springbootjpamultiple.model.Employee;
import org.springframework.data.jpa.repository.JpaRepository;

public interface EmployeeRepository extends JpaRepository<Employee, Long> {
    // Custom query methods can be added here if needed
}

এই ক্লাসটি JpaRepository<Employee, Long> এক্সটেন্ড করেছে, যার মাধ্যমে Employee Entity এর জন্য CRUD অপারেশনগুলো সহজে পরিচালিত হবে।


6. Service Layer

স্প্রিং বুট অ্যাপ্লিকেশনের মধ্যে Business Logic সাধারণত Service Layer এ থাকে।

EmployeeService.java

package com.example.springbootjpamultiple.service;

import com.example.springbootjpamultiple.model.Employee;
import com.example.springbootjpamultiple.repository.EmployeeRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

@Service
public class EmployeeService {

    @Autowired
    private EmployeeRepository employeeRepository;

    public List<Employee> getAllEmployees() {
        return employeeRepository.findAll();
    }

    public Employee createEmployee(Employee employee) {
        return employeeRepository.save(employee);
    }
}

7. Controller Layer

এখন, RESTful API এর জন্য একটি Controller তৈরি করতে হবে যা HTTP রিকোয়েস্ট হ্যান্ডল করবে।

EmployeeController.java

package com.example.springbootjpamultiple.controller;

import com.example.springbootjpamultiple.model.Employee;
import com.example.springbootjpamultiple.service.EmployeeService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;

@RestController
@RequestMapping("/employees")
public class EmployeeController {

    @Autowired
    private EmployeeService employeeService;

    @GetMapping
    public List<Employee> getAllEmployees() {
        return employeeService.getAllEmployees();
    }

    @PostMapping
    public Employee createEmployee(@RequestBody Employee employee) {
        return employeeService.createEmployee(employee);
    }
}

এখানে, GET /employees এবং POST /employees রিকোয়েস্ট হ্যান্ডলিং করা হয়েছে।


সারাংশ

এটি ছিল Spring Boot এবং JPA ব্যবহার করে Multiple DataSource কনফিগার করার উদাহরণ। একাধিক ডেটাবেসে ডেটা অ্যাক্সেসের জন্য আলাদা DataSource, EntityManagerFactory, TransactionManager কনফিগারেশন করতে হয়। এই কনফিগারেশনগুলো স্প্রিং বুটের মাধ্যমে সহজেই বাস্তবায়ন করা সম্ভব এবং এটি সিস্টেমের স্কেলেবিলিটি এবং কার্যক্ষমতা বাড়াতে সাহায্য করে।

Content added By
Promotion
NEW SATT AI এখন আপনাকে সাহায্য করতে পারে।

Are you sure to start over?

Loading...